Ưu điểm và nhược điểm Câu lệnh shell

Có lẽ ưu điểm lớn nhất của việc viết một kịch bản shell là các lệnh và cú pháp hoàn toàn giống với các lệnh được nhập trực tiếp tại dòng lệnh. Lập trình viên không phải chuyển sang một cú pháp hoàn toàn khác, như họ sẽ làm nếu tập lệnh được viết bằng một ngôn ngữ khác hoặc nếu một ngôn ngữ được biên dịch được sử dụng.

Thông thường, viết một kịch bản shell nhanh hơn nhiều so với viết mã tương đương trong các ngôn ngữ lập trình khác. Nhiều ưu điểm bao gồm lựa chọn chương trình hoặc tập tin dễ dàng, bắt đầu nhanh và gỡ lỗi tương tác. Một tập lệnh shell có thể được sử dụng để cung cấp một liên kết tuần tự và ra quyết định xung quanh các chương trình hiện có và đối với các tập lệnh có kích thước vừa phải, việc không có bước biên dịch là một lợi thế. Chạy phiên dịch giúp dễ dàng viết mã gỡ lỗi vào tập lệnh và chạy lại để phát hiện và sửa lỗi. Người dùng không phải là chuyên gia có thể sử dụng tập lệnh để điều chỉnh hành vi của các chương trình và tập lệnh shell cung cấp một số phạm vi giới hạn cho đa xử lý.

Mặt khác, shell scripting dễ bị lỗi tốn kém. Lỗi đánh máy vô ý như rm -rf * / (thay vì rm -rf * /) dự định là văn hóa dân gian trong cộng đồng Unix; một không gian thừa duy nhất chuyển đổi lệnh từ một lệnh xóa mọi thứ trong thư mục con thành một lệnh xóa mọi thứ và cũng cố xóa mọi thứ trong thư mục gốc. Các vấn đề tương tự có thể biến đổi cpmv thành vũ khí nguy hiểm và việc sử dụng sai > chuyển hướng có thể xóa nội dung của tệp. Điều này trở nên rắc rối hơn bởi thực tế là nhiều lệnh UNIX khác nhau về tên chỉ bằng một chữ cái: cp, cd, dd, df,...

Một nhược điểm đáng kể khác là tốc độ thực thi chậm và cần phải khởi chạy một quy trình mới cho hầu hết mọi lệnh shell được thực thi. Khi công việc của tập lệnh có thể được thực hiện bằng cách thiết lập một đường ống trong đó các lệnh bộ lọc hiệu quả thực hiện hầu hết công việc, sự chậm lại được giảm thiểu, nhưng một tập lệnh phức tạp thường chậm hơn một vài bậc so với chương trình được biên dịch thông thường thực hiện một tác vụ tương đương.

Ngoài ra còn có vấn đề tương thích giữa các nền tảng khác nhau. Larry Wall, người tạo ra Perl, nổi tiếng đã viết rằng "Dễ dàng chuyển một vỏ hơn là một kịch bản shell."

Tương tự, các tập lệnh phức tạp hơn có thể chạy vào các giới hạn của chính ngôn ngữ kịch bản lệnh shell; các giới hạn gây khó khăn cho việc viết mã chất lượng và các phần mở rộng của các shell khác nhau để cải thiện các vấn đề với ngôn ngữ shell gốc có thể làm cho vấn đề trở nên tồi tệ hơn.[7]

Nhiều nhược điểm của việc sử dụng một số ngôn ngữ tập lệnh là do lỗi thiết kế trong cú pháp ngôn ngữ hoặc việc triển khai và không nhất thiết phải áp đặt bằng cách sử dụng dòng lệnh dựa trên văn bản; có một số shell sử dụng các ngôn ngữ lập trình shell khác hoặc thậm chí các ngôn ngữ chính thức như Scsh (sử dụng Scheme).

Tài liệu tham khảo

WikiPedia: Câu lệnh shell http://freebookcentre.net/UnixCategory/Free-Unix-S... http://www.faqs.org/docs/air/tsshell.html https://developer.apple.com/mac/library/documentat... https://books.google.com/books?id=9vCoCwAAQBAJ&pg=... https://books.google.com/books?id=J5nKVVg5YHAC https://books.google.com/books?id=Mpi7DQAAQBAJ&pg=... https://books.google.com/books?id=jO-iKwPRX0QC&pg=... https://books.google.com/books?id=tK4oIcnngiUC&pg=... https://books.google.com/books?id=zZYLAAAAQBAJ https://www.linux.com/articles/34658